//
//  RSHomeController.swift
//  RSWeibo
//
//  Created by Macx on 16/8/8.
//  Copyright © 2016年 Macx. All rights reserved.
//

import UIKit

// 设置cell的重用标识
private let CellReuseIdentifier = "CellReuseIdentifier"


class RSHomeController: RSVisitorController {
    
    // 懒加载 所需要的 viewModel
    private lazy var statusTotalViewModel: RSStatusTotalViewModel = RSStatusTotalViewModel()
    
    // 创建一个 加载旋转视图
    private lazy var pullupView: UIActivityIndicatorView = {
        
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        view.color = UIColor.greenColor()
        return view
        
        }()
    
    // 自定义的下拉刷新视图
    private lazy var pullDownRefreshCtr: UIRefreshControl = {
    
        let pulldownView = UIRefreshControl()
        
        pulldownView.addTarget(self, action: "pulldownViewAction", forControlEvents: .ValueChanged)
        
        return pulldownView
    }()
    

    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        if isLogin {
            
            
            setupUI()
            
        }else{
            
            
            
        }
        
       
    }
    
    // 停止数据更新
    private func stopRefreshData(){
    
    
        // 停止 风火轮转动
        pullupView.stopAnimating()
        
        // 停止系统的下拉刷新
        pullDownRefreshCtr.endRefreshing()
        
    }
    
    
    
    private func setupUI(){
    
        // 自动计算高度
        tableView.rowHeight = UITableViewAutomaticDimension
        
        // 给定一个预估的高度
        tableView.estimatedRowHeight = 200
        
        tableView.registerClass(RSStatusViewCell.self, forCellReuseIdentifier: CellReuseIdentifier)
        
        loadStatusData()
        
        
        // 把风火轮赋值到 footerView 上
        tableView.tableFooterView = pullupView
        
        // 添加系统的下拉刷新方式1
        // 把新建的下拉刷新控件赋值给自带的控件属性
//        self.refreshControl = pullDownRefreshCtr
        
        // 添加系统的下拉刷新方式2
        tableView.addSubview(pullDownRefreshCtr)
        
        
    }
    
    // 下拉刷新的监听方法
   @objc private func pulldownViewAction(){
    
        // 模拟网络延时
//        NSThread.sleepForTimeInterval(3)
    
        // 加载数据
        loadStatusData()
    
        //更新数据
//        tableView.reloadData()
    
    
        // 停止更新
//        stopRefreshData()
    }
    
    
    private func loadStatusData(){
        
        // 停止刷新数据
        self.stopRefreshData()

    
        // 调用 viewModel 下载数据
        statusTotalViewModel.loadStatus(pullupView.isAnimating()) { (isSuccess) in
            if isSuccess{
                print("RSStatusTotalViewModel加载数据成功")
                
                                
                // 请求成功后刷新数据
                self.tableView.reloadData()
                
            }else{
                print("RSStatusTotalViewModel加载数据失败")
            }
        }
      
    }

        // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
   
        return statusTotalViewModel.statusTotalArr.count 
    }

    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(CellReuseIdentifier, forIndexPath: indexPath) as! RSStatusViewCell
        
        // 设置数据源
        cell.statusViewModel = statusTotalViewModel.statusTotalArr[indexPath.row]
        
//      print("什么",statusTotalViewModel.statusTotalArr[indexPath.row].statusModel!.pic_urls)
 
    
        return cell
    }
    
    
    // 即将要显示的 cell
    
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        
        // 判断到最后一个cell 的时候
        if indexPath.row == statusTotalViewModel.statusTotalArr.count - 1 && !pullupView.isAnimating() {
            
            // 开启风火轮
            pullupView.startAnimating()
            
            // 加载数据
            loadStatusData()
        }
        
    }

    
}

























